home *** CD-ROM | disk | FTP | other *** search
/ Macworld Expo - Develope…Central & Net Innovations / Developer Central and Net Innovators (MacWorld Expo) (January 1999).iso / Developer Central / Bowers Development / Demo AppMaker / Examples / PowerPlant / Gadgets / CEditText.cp < prev    next >
Encoding:
Text File  |  1998-10-11  |  6.7 KB  |  308 lines  |  [TEXT/CWIE]

  1. // CEditText.cp -- window methods
  2.  
  3. #include "CEditText.h"
  4.  
  5. #include <UEnvironment.h>
  6. #include <UReanimator.h>
  7. #include <URegistrar.h>
  8. #include <LStream.h>
  9. #include <LTabGroup.h>
  10. #include <LEditText.h>
  11. #include <LAMEditTextImp.h>
  12. #include <LGAEditTextImp.h>
  13. #include <LScrollerView.h>
  14. #include <LScrollBar.h>
  15. #include <LAMTrackActionImp.h>
  16. #include <LStdScrollBarImp.h>
  17. #include <LTextEditView.h>
  18. #include <CDoubleEditText.h>
  19. #include <LClock.h>
  20. #include <LAMControlImp.h>
  21. #include <CTextUtils.h>
  22.  
  23. #include "DDocData.h"
  24. #include "GadgetsCmds.h"
  25.  
  26. const MessageT    msgSmall    = 'Smal';
  27. const MessageT    msgX12345    = 'X145';
  28. const MessageT    msgX12345e6    = 'X126';
  29. const MessageT    msgPassword    = 'Pasd';
  30. const MessageT    msgDate    = 'Date';
  31. const MessageT    msgTime    = 'Time';
  32.  
  33. #define PPob_EditTextID    203
  34. #define RidL_EditTextID    203
  35.  
  36. Boolean        CEditText::sIsRegistered = false;
  37.  
  38. //----------
  39. CEditText*        CEditText::CreateEditText (
  40.     LCommander*        inSuperCommander,
  41.     DDocData*        inData)
  42. {
  43.     if (!sIsRegistered) {
  44.         RegisterClass ();
  45.     }
  46.  
  47.     CEditText*        window;
  48.     window = (CEditText *)LWindow::CreateWindow(PPob_EditTextID, inSuperCommander);
  49.     window->ConnectToData (inData);
  50.     return window;
  51. }
  52.  
  53. //----------
  54. #define    RegisterClasses(AbstractClass,AMImpClass,GAImpClass)    \
  55.     RegisterClass_(AbstractClass);    \
  56.     if (useAppearance) {    \
  57.         RegisterClassID_(AMImpClass, AbstractClass::imp_class_ID);    \
  58.     } else {    \
  59.         RegisterClassID_(GAImpClass, AbstractClass::imp_class_ID);    \
  60.     }
  61.  
  62. //----------
  63. void    CEditText::RegisterClass ()
  64. {
  65.     Boolean        useAppearance = UEnvironment::HasFeature (env_HasAppearance);
  66.  
  67.     RegisterClass_(CEditText);
  68.  
  69.     // register the pane classes we use
  70.     RegisterClasses (LEditText, LAMEditTextImp, LGAEditTextImp);
  71.     RegisterClass_(LScrollerView);
  72.     RegisterClasses (LScrollBar, LAMTrackActionImp, LStdScrollBarImp);
  73.     RegisterClass_(LTextEditView);
  74.     RegisterClasses (CDoubleEditText, LAMEditTextImp, LGAEditTextImp);
  75.     RegisterClasses (LClock, LAMControlImp, LAMControlImp);
  76.  
  77.     sIsRegistered = true;
  78. }
  79.  
  80. //----------
  81. CEditText::CEditText (
  82.     LStream*    inStream)
  83.     : LWindow (inStream)
  84. {
  85. }
  86.  
  87. //----------
  88. CEditText::~CEditText ()
  89. {
  90. }
  91.  
  92. //----------
  93. //    This member function gets called once the containment hierarchy that contains
  94. //    this pane has been built. It gives us a chance to get data members for
  95. //    interesting subviews, and to do other operations now that our subviews exist.
  96. void    CEditText::FinishCreateSelf ()
  97. {
  98.     mSmallField = (LEditText*) FindPaneByID ('Smal');
  99.     mSmallField->AddListener (this);
  100.  
  101.     mLargeField = (LTextEditView*) FindPaneByID ('Lare');
  102.  
  103.     mX12345Field = (LEditText*) FindPaneByID ('X145');
  104.     mX12345Field->AddListener (this);
  105.  
  106.     mX12345e6Field = (CDoubleEditText*) FindPaneByID ('X126');
  107.     mX12345e6Field->AddListener (this);
  108.  
  109.     mPasswordField = (LEditText*) FindPaneByID ('Pasd');
  110.     mPasswordField->AddListener (this);
  111.  
  112.     mDateField = (LClock*) FindPaneByID ('Date');
  113.     mDateField->AddListener (this);
  114.  
  115.     mTimeField = (LClock*) FindPaneByID ('Time');
  116.     mTimeField->AddListener (this);
  117.  
  118.     mStyledField = (LTextEditView*) FindPaneByID ('Styd');
  119.  
  120.  
  121.     LTabGroup*        tabGroup = new LTabGroup(this);
  122.     mSmallField->SetSuperCommander(tabGroup);    // becomes the active field
  123.     mLargeField->SetSuperCommander(tabGroup);
  124.     mX12345Field->SetSuperCommander(tabGroup);
  125.     mX12345e6Field->SetSuperCommander(tabGroup);
  126.     mPasswordField->SetSuperCommander(tabGroup);
  127.     mDateField->SetSuperCommander(tabGroup);
  128.     mTimeField->SetSuperCommander(tabGroup);
  129.     mStyledField->SetSuperCommander(tabGroup);
  130.  
  131.     UReanimator::LinkListenerToControls(this, this, RidL_EditTextID);
  132.         // "connect" self to our controls that we want to "listen" to
  133.  
  134.     // any additional initialization for your window:
  135. }
  136.  
  137. //----------
  138. void    CEditText::ConnectToData (
  139.     DDocData*        inData)
  140. {
  141.     mData = inData;
  142.     mData->AddListener (this);
  143.  
  144.     CTextUtils::SetText (mSmallField, mData->GetSmall ());
  145.     CTextUtils::SetText (mLargeField, mData->GetLarge ());
  146.     mX12345Field->SetValue (mData->GetX12345 ());
  147.     mX12345e6Field->SetDValue (mData->GetX12345e6 ());
  148.     CTextUtils::SetText (mPasswordField, mData->GetPassword ());
  149.     {
  150.         LongDateRec        dateTime = mData->GetDate ();
  151.         mDateField->SetLongDate (dateTime);
  152.     }
  153.     {
  154.         LongDateRec        dateTime = mData->GetTime ();
  155.         mTimeField->SetLongDate (dateTime);
  156.     }
  157.     CTextUtils::SetText (mStyledField, mData->GetStyled ());
  158. }
  159.  
  160. //----------
  161. void    CEditText::DataChanged (
  162.     long        inDataID)
  163. {
  164.     StopListening ();
  165.  
  166.     if (inDataID == idSmall) {
  167.         if (!mSmallField->IsTarget ()) {
  168.             CTextUtils::SetText (mSmallField, mData->GetSmall ());
  169.         }
  170.     }
  171.     if (inDataID == idLarge) {
  172.         CTextUtils::SetText (mLargeField, mData->GetLarge ());
  173.     }
  174.     if (inDataID == idX12345) {
  175.         if (!mX12345Field->IsTarget ()) {
  176.             mX12345Field->SetValue (mData->GetX12345 ());
  177.         }
  178.     }
  179.     if (inDataID == idX12345e6) {
  180.         if (!mX12345e6Field->IsTarget ()) {
  181.             mX12345e6Field->SetDValue (mData->GetX12345e6 ());
  182.         }
  183.     }
  184.     if (inDataID == idPassword) {
  185.         if (!mPasswordField->IsTarget ()) {
  186.             CTextUtils::SetText (mPasswordField, mData->GetPassword ());
  187.         }
  188.     }
  189.     if (inDataID == idDate) {
  190.         LongDateRec        dateTime = mData->GetDate ();
  191.         mDateField->SetLongDate (dateTime);
  192.     }
  193.     if (inDataID == idTime) {
  194.         LongDateRec        dateTime = mData->GetTime ();
  195.         mTimeField->SetLongDate (dateTime);
  196.     }
  197.     if (inDataID == idStyled) {
  198.         CTextUtils::SetText (mStyledField, mData->GetStyled ());
  199.     }
  200.  
  201.     StartListening ();
  202. }
  203.  
  204. //----------
  205. void    CEditText::ListenToMessage (
  206.     MessageT    inMessage,
  207.     void*        ioParam)
  208. {
  209.     switch (inMessage) {
  210.     case msgDataChanged:
  211.             DataChanged ((long)ioParam);
  212.         break;
  213.  
  214.     case msgSmall:
  215.         {
  216.             Str255        string;
  217.  
  218.             mSmallField->GetDescriptor (string);
  219.             mData->SetSmall (string);
  220.         }
  221.         break;
  222.  
  223.     case msgX12345:
  224.             mData->SetX12345 (mX12345Field->GetValue ());
  225.         break;
  226.  
  227.     case msgX12345e6:
  228.             mData->SetX12345e6 (mX12345e6Field->GetDValue ());
  229.         break;
  230.  
  231.     case msgPassword:
  232.         {
  233.             Str255        string;
  234.  
  235.             mPasswordField->GetDescriptor (string);
  236.             mData->SetPassword (string);
  237.         }
  238.         break;
  239.  
  240.     case msgDate:
  241.         {
  242.             LongDateRec        dateTime;
  243.  
  244.             mDateField->GetLongDate (dateTime);
  245.             mData->SetDate (dateTime);
  246.         }
  247.         break;
  248.  
  249.     case msgTime:
  250.         {
  251.             LongDateRec        dateTime;
  252.  
  253.             mTimeField->GetLongDate (dateTime);
  254.             mData->SetTime (dateTime);
  255.         }
  256.         break;
  257.  
  258.     default:
  259.           ; // do something
  260.         break;
  261.     }
  262. }
  263.  
  264. //----------
  265. Boolean        CEditText::ObeyCommand (
  266.     CommandT    inCommand,
  267.     void*        ioParam)
  268. {
  269.     Boolean        cmdHandled = true;
  270.  
  271.     if (inCommand < 0) {
  272.         // modal dialog has finished
  273.  
  274.         switch (-inCommand) {
  275.         }
  276.  
  277.     } else {
  278.         switch (inCommand) {
  279.  
  280.         default:
  281.                 cmdHandled = LWindow::ObeyCommand(inCommand, ioParam);
  282.             break;
  283.         }
  284.     }
  285.  
  286.     return cmdHandled;
  287. }
  288.  
  289. //----------
  290. void    CEditText::FindCommandStatus (
  291.     CommandT    inCommand,
  292.     Boolean        &outEnabled,
  293.     Boolean        &outUsesMark,
  294.     Char16        &outMark,
  295.     Str255        outName)
  296. {
  297.     outUsesMark = false;
  298.  
  299.     switch (inCommand) {
  300.  
  301.  
  302.     default:
  303.             LWindow::FindCommandStatus(inCommand, outEnabled,
  304.                                         outUsesMark, outMark, outName);
  305.         break;
  306.     }
  307. }
  308.